perm filename MARCH7[1,ALS] blob sn#090757 filedate 1974-03-08 generic text, type T, neo UTF8
00010	INTEGER PROCEDURE ZERO(INTEGER LOW,HIGH);
00020	BEGIN
00030	INTEGER I,J; REAL MIN;
00040	
00050	MIN←10000;
00060	FOR I←LOW STEP 1 UNTIL HIGH DO
00070	  IF C[I]<MIN THEN BEGIN MIN←C[I]; J←I; END;
00080	IF (J=LOW)∨(J=HIGH THEN NZA←NZ←J←0 ELSE BEGIN
00090	  NZ←J; NZA←C[J]; END;
00100	RETURN(J);
00110	END;
00120	
00130	
00140	INTEGER PROCEDURE INTERP(INTEGER F);
00150	BEGIN
00160	⊂ Parobolic interpolation to increase precision in locating formants to
00170	approximately 10 hertz for a 256 point FFT with 20000 samples per second;
00180	INTEGER I; REAL X;
00190	
00200	X←2*(C[F-1]-C[F+1])/(C[F-1]-2*C[F]+C[F+1]);	
00210		⊂ Four times the displacement of center of the formant from F;
00220	I←F*4-X; IF I>511 THEN I←511;	⊂ To store in 9 bits;
00230	RETURN(I);
00240	END;
00250	
00260	REAL PROCEDURE PASS(INTEGER FA,FB);
00270	BEGIN
00280	INTEGER I; REAL X;
00290	X←0;
00300	FOR I←FA STEP 1 UNTIL FB DO X←X+C[I];
00310	IF (I←FB-FA+1)≤0 THEN X←0 ELSE X←X/I;
00320	RETURN(X);
00330	END;
00340	
00350	
00360	PROCEDURE NASAL;
00370	BEGIN
00380	
00390	IF INFLAG=0 THEN BEGIN
00400		INNAM[P]←CVASP("NP");	P←P+1;
00410		INNAM[P]←CVASP("NZ");	P←P+1;
00420		INNAM[P]←CVASP("NPA");	P←P+1;
00430		INNAM[P]←CVASP("NZA");	P←P+1;
00440	
00450	END ELSE BEGIN
00460	
00470		IF F1<NP_LOW THEN FA←NP_LOW ELSE FA←F1;
00480		IF F2>NP_HI THEN FB←NP_HI ELSE FB←F2;
00490		NP←PEAK(FA,FB);
00500		NZ←ZERO(FA,FB);
00510	
00520	
00530		INDATA[P]←NP;		P←P+1;
00540		INDATA[P]←NZ;		P←P+1;
00550		INDATA[P]←C[NP];	P←P+1;
00560		INDATA[P]←C[NZ];	P←P+1;
00570	
00580	END;
00590	
00600